package ufr_stgi.assistance_conduite;

import java.io.File;
import java.util.*;

import ufr_stgi.assistance_conduite.modele.ComparateurPanneauDistance;
import ufr_stgi.assistance_conduite.modele.Panneau;
import android.app.*;
import android.location.Location;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.*;
import android.widget.ImageView.ScaleType;

/**
 * Activité qui affiche la liste des panneaux que le Smartphone connaît (enregistré dans sa BdD)
 * @author Guillaume MONTAVON & Renaud DAVID (Master 2 RIM)
 */
public class ListePanneau extends Activity {
	
	private MonApplication appli; //application
	private ListView maListePanneau;
	
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.liste_panneau_main);
		
		appli = (MonApplication)getApplication();
		
		//Récupération de la listview créée dans le fichier main.xml
		maListePanneau = (ListView) findViewById(R.id.listePanneau);
		
		ArrayList<HashMap<String, String>> listItem = new ArrayList<HashMap<String, String>>();
		
		HashMap<String, String> map;
		
		ArrayList<Panneau> listePanneaux = appli.getBdd().getListePanneau(false, appli.getLatitude(), appli.getLongitude());
		
		
		//calcul la distance à l'utilisateur
		for (Panneau p : listePanneaux) {
			
			Location myLoc = new Location("");
			myLoc.setLatitude(appli.getLatitude());
			myLoc.setLongitude(appli.getLongitude());
			
			Location pLoc = new Location("");
			pLoc.setLatitude(p.getLatitude());
			pLoc.setLongitude(p.getLongitude());
			
			p.setDistanceUtilisateur(Math.round(myLoc.distanceTo(pLoc)));
			
		}
		//trie
		Comparator<Panneau> compar = new ComparateurPanneauDistance();
		Collections.sort(listePanneaux,compar);
		
		for(int i = 0; i < listePanneaux.size() && i < MonApplication.LISTE_PANNEAUX_NB_VISIBLE; i++) {
			//Création d'une HashMap pour insérer les informations du premier item de notre listView			
			map = new HashMap<String, String>();
			String titre = getResources().getString(R.string.panneau);
			try{
				titre += " " + appli.getBdd().getType(listePanneaux.get(i).getIdType()).getLibelle();
			} catch (Exception e) {}
			
			map.put("titre", titre);
			map.put("chemin", listePanneaux.get(i).getChemin());
			
			if(listePanneaux.get(i).getDistanceUtilisateur() > 1000)
				map.put("distance", "" + listePanneaux.get(i).getDistanceUtilisateur()/1000 + " km");
			else
				map.put("distance", "" + listePanneaux.get(i).getDistanceUtilisateur() + " m");

			map.put("idType", "" + listePanneaux.get(i).getIdType());
			listItem.add(map);
		}
		
		//Création d'un SimpleAdapter qui se chargera de mettre les items présent dans notre list (listItem) dans la vue affichageitem
		AdapterListePanneaux mSchedule = new AdapterListePanneaux(this.getBaseContext(), appli, listItem, R.layout.item_panneau,
			new String[] {"idType", "titre", "chemin", "distance"}, new int[] {R.id.idType, R.id.titre, R.id.chemin, R.id.distance});
		
		//On attribut à notre listView l'adapter que l'on vient de créer
		maListePanneau.setAdapter(mSchedule);
		
		maListePanneau.setLayoutAnimation(null);
		maListePanneau.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(this, R.anim.list_layout_controller));
		maListePanneau.startLayoutAnimation();
		
		//Enfin on met un écouteur d'évènement sur notre listView
		maListePanneau.setOnItemClickListener(new OnItemClickListener() {
			@Override
			@SuppressWarnings("unchecked")
		 	public void onItemClick(AdapterView<?> a, View v, int position, long id) {
				HashMap<String, String> map = (HashMap<String, String>) maListePanneau.getItemAtPosition(position);
				final ImageView image = new ImageView(v.getContext());
				//image.setImageURI(Uri.fromFile(new File(appli.getDossierImage(), map.get("description"))));
				
				image.setImageDrawable(appli.redimensionnerImage(new File(appli.getDossierImage(), map.get("chemin")), 500));
				image.setScaleType(ScaleType.CENTER);
				
				new AlertDialog.Builder(ListePanneau.this)
				.setTitle(map.get("titre"))
				.setMessage(map.get("titre"))
				.setView(image)
				.setPositiveButton(android.R.string.ok, null)
				.show();
			}
		 });
		
	}
	
}